iT邦幫忙

2024 iThome 鐵人賽

DAY 9
3
自我挑戰組

AI救我系列 第 9

Day 9 - 光學繞射:單狹縫一維傅立葉轉換公式in Python (2)

  • 分享至 

  • xImage
  •  

今天稍微輕鬆一點,根據昨天的單狹縫一維傅立葉變換公式去做微調,並試著藉由修改參數,實際透過圖感受光通過單狹縫的變化。

https://ithelp.ithome.com.tw/upload/images/20240921/20168442nZbHbAoeWb.png

首先我改了:

  1. 增加顯示狹縫位置(the slit那條)
  2. 增加顯示光強度(intensity那條),算法參考先前公式
    https://ithelp.ithome.com.tw/upload/images/20240921/20168442xDALvwoEPj.png
  3. 修改顏色等美觀

修改後程式如下:

import numpy as np
import matplotlib.pyplot as plt

#Define single slit 穿過slit的光
def single_slit(x, d): #d=slit width
    if -d/2 < x < d/2: #光如果落在slit中間
        return 1/d #為了乘以d後通過狹縫面積好算為1,先除以d
    else:
        return 0 #落在狹縫外
    
D = 10 #繪圖範圍-5~5
d = 1  #狹縫寬度
N = 501 #繪圖間隔(精度)
x_list = [-D/2 + D*i/N for i in range(N)] #X=0~500去切繪圖範圍,從-D/2慢慢畫到D/2
source = [single_slit(x_list[i], d) for i in range(N)]  #把光源帶進函數

def phase_term(kx, x): #處理complex,也就是公式中dx以前的部分
    phase = complex(0, -kx*x) #前面放實部(這裡面沒有,所以為0),後面為虛部-kx*x
    return np.exp(phase) #呼叫exponential e的i次方

def Fraunhofer_1D(kx, source, x_list, dx): #dx就是D/N(寬),source帶入phase term就是每段高度做積分
    output = 0
    for i in range(len(x_list)):
        rec_area = source[i]*phase_term(kx, x_list[i])*dx #黎曼和長方形面積
        output += rec_area  #不斷地跑回圈加長方形面積
    return output
    
K = 2*np.pi*N/D #波數
kx_list = [-K/2 + K*i/N for i in range(N)] #波數(空間上的分佈)
far_field = [Fraunhofer_1D(kx_list[i], source, x_list, D/N) for i in range(N)] #把切好的波數分佈帶入formula,其他項目依序帶入 
intensity = [abs(far_field[i])**2 for i in range(N)] #取絕對值平方得光強度

plt.plot(x_list, far_field, label='farfieldamplitude', color='cadetblue')
plt.plot(x_list, source, label='the slit', color='cyan')
plt.plot(x_list, intensity, label='intensity', color='dodgerblue')
plt.xlabel('X')
plt.title('1DFourierTransform_singleslit')
plt.grid(True)
plt.legend()
plt.show()

現在就讓我們來看看,狹縫寬度如果變得更寬,會得出什麼樣的圖形!

只要在這裡修改即可:
d = 狹縫寬度

這次我們改為d = 6看看....

https://ithelp.ithome.com.tw/upload/images/20240921/20168442BrAGo3IYee.png

現象變得平坦而不明顯了。

如果改成d=0.5...

https://ithelp.ithome.com.tw/upload/images/20240921/20168442MeKm35wjuv.png

單狹縫繞射現象變得非常劇烈。

也就是說狹縫寬度和遠場的圖像是成反比!

建立好模型後,觀察物理現象的變化就變得非常簡單直覺。
如果有小朋友正在接觸物理,不妨把python也一起教給他,相信學起來更增樂趣~


上一篇
Day 8 - 光學繞射:單狹縫一維傅立葉轉換公式in Python (1)
下一篇
Day 10 - 光學繞射:雙狹縫一維傅立葉轉換公式in Python
系列文
AI救我31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言